package vip

import "github.com/gogf/gf/v2/os/gtime"

// 请求响应

type AccountV1 struct {
	UserId   uint `json:"user_id" v:"integer"`
	DeviceId uint `json:"device_id" v:"integer"`
}
type ServerOpInfo struct {
	Ip        string
	CreatedBy uint `v:"required|integer"`
}

type LicenseActivateRequest struct {
	AccountV1

	Code      string `json:"code" v:"max-length:29|min-length:23"`
	ProductId uint
	GroupId   uint
	// 外部
	DeviceHash string `json:"device_hash" v:"max-length:72"`
	Type       string
	// 内部
	ActivateType uint // 是否返回 VIP
}
type LicenseGenerateRequest struct {
	IsNumber      uint        `json:"is_number" d:"0"`   // 是否数字 仅请求标识
	IsTest        uint        `json:"is_test" d:"0"`     // 是否测试 仅数据标识
	IsActivity    uint        `json:"is_activity" d:"0"` // 是否活动
	ValidFrom     *gtime.Time `json:"valid_from"`        // 开始时间
	ValidTo       *gtime.Time `json:"valid_to"`          // 结束时间
	Channel       string      `json:"channel"`           // 渠道
	Function      string      `json:"function"`          // 功能码
	Remark        string      `json:"remark"`            // 备注
	TransactionId string      `json:"transaction_id"`    // 订单号
	CreatedBy     uint        `json:"created_by"`        // 创建人
	// code
	Amount       uint           `json:"amount" d:"1" v:"min:1#数量是大于 1 整数"`        // 生成份数
	CountAllowed uint           `json:"count_allowed" d:"1" v:"min:1#数量是大于 1 整数"` // 最大激活数
	Rights       []LicenseRight `json:"rights"`                                   // 权益
}
type LicenseCodeDestroyBatchRequest struct {
	ServerOpInfo
	Type  uint     `p:"type" v:"required"` // 1reset 2revoke
	Codes []string `p:"codes" v:"required"`
}

// 内部

// LicenseRight
// 10 period ExpiredAt 周期*Quantity
// 20 quota Quota 40 糖币 点数*Quantity
// 30 candy Quota+ExpiredAt 70 按年有效期次数 点数*Quantity 周期*VipQuantity
// 50 limit Quota+ExpiredAt(绑定period) 51 PDF 非 VIP 80 按年限次 点数*Quantity
type LicenseRight struct {
	RelationType uint `json:"relation_type"`                                 // 关联类型 group 1 产品系列 product 2 产品 vip 3 自定义
	RelationId   uint `json:"relation_id" v:"min:1#产品 ID 必需|产品 ID 是大于 0 整数"` // 关联 ID
	VipType      uint `json:"vip_type"`                                      // VIP 类型
	Quota        uint `json:"quota" d:"0" v:"min:0#数量必须大于 0 整数"`             // 配额
	PeriodType   uint `json:"period_type"`                                   // 周期类型
	LicenseType  uint `json:"license_type"`                                  // 许可类型
	MaxDevices   uint `json:"max_devices" d:"1" v:"min:1#最大设备数不能小于 0"`       // 最大激活数
	Quantity     uint `json:"quantity" d:"1" v:"min:1#数量是大于0整数"`             // 生成数量+购买数量
	VipQuantity  uint `json:"vip_quantity" v:"min:1" d:"1"`                  // VIP 数量
}
